package com.code2roc.jarmanage.servlet.filemanage;

import com.code2roc.jarmanage.db.ConfigDB;
import com.code2roc.jarmanage.depoly.DepolyPlatform;
import com.code2roc.jarmanage.model.ConfigDO;
import com.code2roc.jarmanage.model.FileInfo;
import com.code2roc.jarmanage.model.Result;
import com.code2roc.jarmanage.util.*;
import oshi.SystemInfo;
import oshi.software.os.FileSystem;
import oshi.software.os.OSFileStore;
import oshi.software.os.OperatingSystem;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class SystemFileListServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Result result = Result.okResult();
        HashMap paramMap = CommonUtil.getParamMap(req);
        String prefix = ConvertUtil.convert2String(paramMap.get("prefix"));
        String basePath = EnviromentUtil.getFileRootHomePath();
        String depolyPath = basePath + prefix;
        List<FileInfo> fileInfoList = new ArrayList<>();
        if(StringUtil.isEmpty(prefix) && EnviromentUtil.getDepolyPlaform().equals(DepolyPlatform.Windows)){
            //如果是根目录并且是widnows，特殊处理
            SystemInfo si = new SystemInfo();
            OperatingSystem os = si.getOperatingSystem();
            FileSystem fileSystem = os.getFileSystem();
            List<OSFileStore> fsArray = fileSystem.getFileStores();
            for (OSFileStore fs : fsArray) {
                FileInfo fileInfo = new FileInfo();
                fileInfo.setFileName(fs.getMount()+"\\");
                try {
                    fileInfo.setFileID(EncryptUtil.encryptByMD5(fs.getMount()+"\\"));
                } catch (Exception e) {

                }
                fileInfo.setCheckDir(true);
                fileInfoList.add(fileInfo);
            }
        }else{
            File file = new File(depolyPath);
            File[] fileList = file.listFiles();
            for (File f : fileList) {
                FileInfo fileInfo = new FileInfo();
                fileInfo.setFileName(f.getName());
                try {
                    fileInfo.setFileID(EncryptUtil.encryptByMD5(f.getName()));
                } catch (Exception e) {

                }
                fileInfo.setCreateDate(FileUtil.getCreationTime(f));
                fileInfo.setLastModifyDate(FileUtil.getLastModifyTime(f));
                fileInfo.setCheckDir(f.isDirectory());
                if(!f.isHidden()){
                    fileInfoList.add(fileInfo);
                }
            }
        }
        result.add("obj", fileInfoList);
        resp.getWriter().println(result.toString());
    }
}
